package br.com.fatecmc.persephone.maoDeObra.core.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.fatecmc.core.dao.AbstractDAO;
import br.com.fatecmc.fatec.domain.Entidade;
import br.com.fatecmc.persephone.maoDeObra.domain.AcidenteTrabalho;
import br.com.fatecmc.persephone.maoDeObra.domain.CategoriaFuncionario;
import br.com.fatecmc.persephone.maoDeObra.domain.MaoDeObra;
import br.com.fatecmc.persephone.maoDeObra.domain.TipoAcidente;

public class DAOAcidenteTrabalho extends AbstractDAO{

	@Override
	public void salvar(Entidade obj) throws IllegalArgumentException {
		try {
			AcidenteTrabalho acidente = (AcidenteTrabalho) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "INSERT INTO tb_propriedades_acidentes_de_trabalho ( id_propriedade, id_tipo_acidente, quantidade)" +
	        			   "VALUES(?,?,?)";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(1, acidente.getId());
	        pstm.setInt(2, acidente.getTipo().getId());
	        pstm.setInt(3, acidente.getQuantidade());
	        pstm.executeUpdate();
	        pstm.close();
	        conexao.getConexao().close();
		} catch (Exception e) {
			System.out.println(e.getMessage());
			Logger.getLogger(DAOAcidenteTrabalho.class.getName()).log(Level.SEVERE, null, e);
		}
		
	}

	@Override
	public Entidade alterar(Entidade obj) {
		try {
			AcidenteTrabalho acidente = (AcidenteTrabalho) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "update tb_propriedades_acidentes_de_trabalho set id_tipo_acidente= ?, quantidade = ? where id_propriedade = ?" +
	        			   "VALUES(?,?,?)";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setInt(3, acidente.getId());
	        pstm.setInt(1, acidente.getTipo().getId());
	        pstm.setInt(2, acidente.getQuantidade());
	        pstm.executeUpdate();
	        pstm.close();
	        conexao.getConexao().close();
	        return acidente;
		} catch (Exception e) {
			System.out.println(e.getMessage());
			Logger.getLogger(DAOAcidenteTrabalho.class.getName()).log(Level.SEVERE, null, e);
			return null;
		}
	}

	@Override
	public boolean excluir(Entidade obj) {
		try {
			AcidenteTrabalho acidente = (AcidenteTrabalho) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "delete from tb_propriedades_acidentes_de_trabalho where id_propriedade = ? ";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1 , acidente.getId());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(DAOAcidenteTrabalho.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
	}

	@Override
	public Collection consultar(Entidade obj) {
		try {
			AcidenteTrabalho acidente = (AcidenteTrabalho) obj;
	            String sql ="";
	            PreparedStatement pstm;
	            conexao.getConexao().createStatement();
	           
	            sql = "SELECT * from tb_propriedades_acidentes_de_trabalho where id_propriedade = ?";
	            pstm = conexao.getConexao().prepareStatement(sql);
	            pstm.setInt(1 , acidente.getId());
	            
	            
	            
	            ResultSet rs = pstm.executeQuery();
	            ArrayList<Entidade> lista = new ArrayList<Entidade>();
	            while (rs.next()) {     
	            	AcidenteTrabalho acidadeSelecionado = new AcidenteTrabalho();
	            	            	
	            	acidadeSelecionado.setId(rs.getInt("id_propriedade"));  
	            	//retornando categoria
	            	
	            	DAOTipoAcidente DAOTipo = new DAOTipoAcidente();
	            	TipoAcidente cat = new TipoAcidente();
	            	cat.setId(rs.getInt("id_tipo_acidente"));
	            	Collection<Entidade> entidadeLista = new ArrayList<Entidade>();
	        		entidadeLista = (ArrayList<Entidade>) DAOTipo.consultar(cat);
	        		if(entidadeLista != null && !entidadeLista.isEmpty()){
	        			for(Entidade unidade : entidadeLista){
	        				TipoAcidente consulta = new TipoAcidente();
	        				consulta = (TipoAcidente) unidade; 
	        				if(consulta != null){
	        					cat = consulta;
	        				}
	        			}
	        		}
	        		else{
	        			cat = null;
	        		}
	        		
	        		acidadeSelecionado.setTipo(cat);
	        		
	            	acidadeSelecionado.setQuantidade(rs.getInt("quantidade"));	            	
	            	
	            	lista.add(acidadeSelecionado);
	                
	                
	            }  
	            conexao.getConexao().close();
	            pstm.close();
	            return lista;
	        } catch (SQLException ex) {
	            Logger.getLogger(DAOCategoriaFuncionario.class.getName()).log(Level.SEVERE, null, ex);
	            return null;
	        }
	}

}
